import cv2 as cv
import numpy as np

# ----------------------------sift角检测------------------------
# 受专利保护
img = cv.imread('1.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# 创建SIFT对象
sift = cv.SIFT_create()

# 检测关键点并计算描述符
kp, des = sift.detectAndCompute(gray, None) 
# mask掩码：None.如果提供掩码，SIFT 仅在掩码为非零的区域内检测关键点。
# 返回值：kp关键点信息包括关键点位置、大小、角度等信息。
# des描述符信息包括描述符值，类型：numpy.ndarray，形状为 (n, 128)，其中 n 是检测到的关键点数量。

# 绘制关键点
cv.drawKeypoints(img, kp, img, flags=cv.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
# 参数说明：输入图像、关键点、输出图像、绘制类型。
# flags：
# flags（可选，默认值为0）：
        # cv2.DRAW_MATCHES_FLAGS_DEFAULT（默认）：
        # 仅绘制关键点位置（小圆圈），忽略方向和大小。
        # cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS：
        # 绘制带方向和大小的关键点（圆圈大小反映size，箭头表示angle）。
        # cv2.DRAW_MATCHES_FLAGS_DRAW_OVER_OUTIMG：
        # 直接在输出图像上绘制，不清除原有内容。


cv.imshow('sift', img)
cv.waitKey(0)
cv.destroyAllWindows()